package com.waitingresult.str;

/**
 * @Author: WangShuai
 * @CreateTime: 2024-06-24  11:31
 * @Description:
 * @Version: 1.0
 * *给出由小写字母组成的字符串 S，重复项劓除操作会选择两个相邻且相同的字母，并删除它们。
 * *在S 上反复执行重复项别除操作，直到无法继续删除。
 * *在完成所有重复项剔除操作后返回最终的字符串。答案保证一。
 * 药
 * * 输入:"abbaca"
 * * 输出:"ca"
 * * 解释:
 * *例如，在"abbacq”中，我们可以删除"bb”由于两字母相邻且相同，这是此时唯一可以执行别除操作的重复项。
 * *之后我们得到字符串“aacq”，其中又只有“aa” 可以执行重复项删除操作，所以最后的字符串为"ca”。
 */
public class RemoveRepetitionStr {
//    private static Boolean checkRepetition(String str, String target) {
//
//    }

    private static String removeRepetitionV3(String str) {
        char[] charArray = str.toCharArray();
        char[] temp = new char[charArray.length];
        int left = 0, right = -1;
        for (char c : charArray) {
            if (left <= right && temp[left] == c) {
                right--;
            } else {
                temp[++right] = c;
            }


        }
        return new String(temp, 0, right + 1);

    }

    private static String removeRepetitionV2(String str) {

        while (true) {
            int checkIndex = check(str);
            if (checkIndex == -1) {
                return str;
            }
            str = str.substring(0, checkIndex) + str.substring(checkIndex + 1);
        }
    }

    private static int check(String str) {
        char[] charArray = str.toCharArray();
        for (int i = 1; i < charArray.length; i++) {
            if (charArray[i] == charArray[i - 1]) {
                return i;
            }
        }
        return -1;
    }

    private static void remove(String str) {
        char[] charArray = str.toCharArray();
        for (int i = 0; i < charArray.length; i++) {
            if (i + 1 < charArray.length && charArray[i] == charArray[i + 1]) {
                str = str.replace(String.valueOf(charArray[i]), "");
                str = str.replace(String.valueOf(charArray[i]), "");
            }
        }
    }


    public static void main(String[] args) {
        System.err.println(removeRepetitionV2("abbacq"));
        System.err.println(removeRepetitionV2("abbaccqa"));
    }

    private static String removeRepetition(String str) {
        if (str.length() <= 1) {
            return "";
        }

        String tempStr = str;
        char[] charArray = str.toCharArray();

        char lastChat = charArray[0];
        while (lastChat != ' ') {
            int length = charArray.length;
            for (int i = 1; i < charArray.length; i++) {
                if (lastChat == charArray[i]) {
                    tempStr = tempStr.replace(String.valueOf(charArray[i]), "");
                    tempStr = tempStr.replace(String.valueOf(charArray[i]), "");
                    charArray = tempStr.toCharArray();
                    lastChat = charArray[0];
                    // 重复
                } else {
                    if (i != charArray.length - 1) {
                        lastChat = charArray[i];
                    }
                }
            }
            if (length == charArray.length) {
                lastChat = ' ';
            }
        }

        return tempStr;
    }
}
